home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / disk / cdrom / MusicBox-2.1bi.lha / MusicBox / MusicBox-GUI.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-29  |  25.1 KB  |  768 lines

  1. /*
  2.  ##########################################################################
  3.  ####                                                                  ####
  4.  ####                        The MusicBox Project                      ####
  5.  ####                    ============================                  ####
  6.  ####                                                                  ####
  7.  #### MusicBoxGUI.c                                                    ####
  8.  ####                                                                  ####
  9.  #### Version 2.1os  --  September 29, 2000                            ####
  10.  ####                                                                  ####
  11.  #### Copyright (C) 1994  Thomas Dreibholz                             ####
  12.  ####               2000  Molbachweg 7                                 ####
  13.  ####                     51674 Wiehl                                  ####
  14.  ####                     Germany                                      ####
  15.  ####                                                                  ####
  16.  ####                     EMail: Dreibholz@bigfoot.com                 ####
  17.  ####                     WWW:   http://www.bigfoot.com/~dreibholz     ####
  18.  ####                                                                  ####
  19.  ##########################################################################
  20. */
  21. /***************************************************************************
  22.  *                                                                         *
  23.  *   This program is free software; you can redistribute it and/or modify  *
  24.  *   it under the terms of the GNU General Public License as published by  *
  25.  *   the Free Software Foundation; either version 2 of the License, or     *
  26.  *   (at your option) any later version.                                   *
  27.  *                                                                         *
  28.  ***************************************************************************/
  29.  
  30. /* MusicBox Benutzeroberfläche */
  31.  
  32. #include "MusicBox-GUI.h"
  33. #include "MusicBox.h"
  34.  
  35. extern struct Einstellungen  Einstellungen;
  36. extern struct Catalog       *Catalog;
  37. extern BOOL                  LowRes;
  38. extern BOOL                  FastExit;
  39.  
  40. struct Screen         *Scr = NULL;
  41. UBYTE                 *PubScreenName = NULL;
  42. APTR                   VisualInfo = NULL;
  43. struct Window         *CDPlayerWnd = NULL;
  44. struct Gadget         *CDPlayerGList = NULL;
  45. struct Gadget         *VolumeDownL,
  46.                       *VolumeDownR,
  47.                       *PositionDown = NULL;
  48. struct Menu           *CDPlayerMenus = NULL;
  49. struct IntuiMessage    CDPlayerMsg;
  50. struct TextFont       *Font       = NULL;
  51. struct Gadget         *CDPlayerGadgets[CDPlayer_CNT];
  52. UWORD                  CDPlayerLeft = 0;
  53. UWORD                  CDPlayerTop = 32;
  54. UWORD                  CDPlayerWidth = 632;
  55. UWORD                  CDPlayerHeight = 244;
  56. UBYTE                 *CDPlayerWdt = (UBYTE *)TITEL;
  57.  
  58. struct TextAttr topaz11 = {
  59.    ( STRPTR )"times.font", 15, 0x00, 0x42 };
  60.  
  61. #define TEXTE 41
  62.  
  63. UBYTE *Texte[TEXTE]=
  64. {
  65.  "Project",
  66.  "Load preferences",
  67.  "Save preferences",
  68.  NULL,
  69.  "Setup printer...",
  70.  "Print...",
  71.  NULL,
  72.  "Iconify...",
  73.  "About MusicBox...",
  74.  "Help...",
  75.  NULL,
  76.  "Quit MusicBox",
  77.  "Preferences",
  78.  "Auto functions",
  79.  "Auto-repeat",
  80.  "Auto-play",
  81.  NULL,
  82.  "Auto-save catalog",
  83.  "Load full catalog quietly",
  84.  "Flush resources",
  85.  "Display",
  86.  "Elapsed track time",
  87.  "Elapsed CD time",
  88.  NULL,
  89.  "Remaining track time",
  90.  "Remaining CD time",
  91.  "Format",
  92.  "Mins/Secs/Frames",
  93.  "32-Bit Address",
  94.  "Percent",
  95.  "Megabytes",
  96.  NULL,
  97.  "Joystick",
  98.  "Off",
  99.  "Level I",
  100.  "Level II",
  101.  "Information",
  102.  "Display full catalog...",
  103.  NULL,
  104.  "About current CD",
  105.  "About CD-ROM-drive",
  106. };
  107.  
  108. struct NewMenu CDPlayerNewMenu[] = {
  109.    NM_TITLE, NULL, NULL, 0, NULL, NULL,
  110.    NM_ITEM, NULL, (STRPTR)"L", 0, 0L, (APTR)PrefsLaden,
  111.    NM_ITEM, NULL, (STRPTR)"S", 0, 0L, (APTR)PrefsSichern,
  112.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  113.    NM_ITEM, NULL, (STRPTR)"W", 0, 0L, (APTR)SetupPrinter,
  114.    NM_ITEM, NULL, (STRPTR)"P", 0, 0L, (APTR)Print,
  115.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  116.    NM_ITEM, NULL, (STRPTR)"I", 0, 0L, 0xFFFFFFFF,
  117.    NM_ITEM, NULL, (STRPTR)"#", 0, 0L, (APTR)Information,
  118.    NM_ITEM, NULL, (STRPTR)"H", 0, 0L, (APTR)Hilfe,
  119.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  120.    NM_ITEM, NULL, (STRPTR)"Q", 0, 0L, 0xFFFFFFFE,
  121.  
  122.    NM_TITLE, NULL, NULL, 0, NULL, NULL,
  123.  
  124.    NM_ITEM, NULL, NULL, 0, NULL, NULL,
  125.    NM_SUB, NULL, (STRPTR)"R", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)AutoRepeat,
  126.    NM_SUB, NULL, (STRPTR)"G", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)AutoStart,
  127.  
  128.    NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  129.    NM_SUB, NULL, (STRPTR)"Y", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)AutoSave,
  130.    NM_SUB, NULL, (STRPTR)"$", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)AutoLoad,
  131.    NM_SUB, NULL, (STRPTR)"&", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)AutoFlush,
  132.  
  133.    NM_ITEM, NULL, NULL, 0, NULL, NULL,
  134.    NM_SUB, NULL, (STRPTR)"T", CHECKIT|MENUTOGGLE|CHECKED, 26L, (APTR)Zeit1,
  135.    NM_SUB, NULL, (STRPTR)"A", CHECKIT|MENUTOGGLE, 25L, (APTR)Zeit2,
  136.    NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  137.    NM_SUB, NULL, (STRPTR)"F", CHECKIT|MENUTOGGLE, 19L, (APTR)Zeit3,
  138.    NM_SUB, NULL, (STRPTR)"E", CHECKIT|MENUTOGGLE, 11L, (APTR)Zeit4,
  139.  
  140.    NM_ITEM, NULL, NULL, 0, NULL, NULL,
  141.    NM_SUB, NULL, (STRPTR)"Z", CHECKIT|MENUTOGGLE|CHECKED, 14L, (APTR)Format1,
  142.    NM_SUB, NULL, (STRPTR)"B", CHECKIT|MENUTOGGLE, 13L, (APTR)Format2,
  143.    NM_SUB, NULL, (STRPTR)"D", CHECKIT|MENUTOGGLE, 11L, (APTR)Format3,
  144.    NM_SUB, NULL, (STRPTR)"M", CHECKIT|MENUTOGGLE, 7L, (APTR)Format4,
  145.  
  146.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  147.    NM_ITEM, NULL, NULL, 0, NULL, NULL,
  148.    NM_SUB, NULL, (STRPTR)"0", CHECKIT|MENUTOGGLE, 6L, (APTR)JoystickA,
  149.    NM_SUB, NULL, (STRPTR)"1", CHECKIT|MENUTOGGLE, 5L, (APTR)Joystick1,
  150.    NM_SUB, NULL, (STRPTR)"2", CHECKIT|CHECKED|MENUTOGGLE, 3L, (APTR)Joystick2,
  151.  
  152.    NM_TITLE, NULL, NULL, 0, NULL, NULL,
  153.    NM_ITEM, NULL, (STRPTR)"K", 0, 0L, (APTR)Gesamtkatalog,
  154.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  155.    NM_ITEM, NULL, (STRPTR)"C", 0, 0L, (APTR)AboutCD,
  156.    NM_ITEM, NULL, (STRPTR)"N", 0, 0L, (APTR)AboutDrive,
  157.  
  158.    NM_END, NULL, NULL, 0, 0L, NULL };
  159.  
  160. UWORD CDPlayerGTypes[] = {
  161.    LISTVIEW_KIND,
  162.    BUTTON_KIND,
  163.    BUTTON_KIND,
  164.    BUTTON_KIND,
  165.    BUTTON_KIND,
  166.    BUTTON_KIND,
  167.    BUTTON_KIND,
  168.    BUTTON_KIND,
  169.    BUTTON_KIND,
  170.    BUTTON_KIND,
  171.    BUTTON_KIND,
  172.    BUTTON_KIND,
  173.    BUTTON_KIND,
  174.    BUTTON_KIND,
  175.    BUTTON_KIND,
  176.    BUTTON_KIND,
  177.    BUTTON_KIND,
  178.    BUTTON_KIND,
  179.    BUTTON_KIND,
  180.    BUTTON_KIND,
  181.    BUTTON_KIND,
  182.    CYCLE_KIND,
  183.    CYCLE_KIND,
  184.    SLIDER_KIND,
  185.    STRING_KIND,
  186.    SLIDER_KIND,
  187.    CHECKBOX_KIND,
  188.    SLIDER_KIND,
  189.    CYCLE_KIND, 
  190. };
  191.  
  192. struct NewGadget CDPlayerNGad[] = {
  193.    397, -12, 228, 174, NULL, NULL, GD_Liste, 0, NULL, (APTR)ListeClicked,
  194.    339, 52, 37, 19, (UBYTE *)"_9", NULL, GD_T9, PLACETEXT_IN, NULL, (APTR)T9Clicked,
  195.    339, 76, 37, 19, (UBYTE *)"_6", NULL, GD_T6, PLACETEXT_IN, NULL, (APTR)T6Clicked,
  196.    339, 100, 37, 19, (UBYTE *)"_3", NULL, GD_T3, PLACETEXT_IN, NULL, (APTR)T3Clicked,
  197.    295, 52, 37, 19, (UBYTE *)"_8", NULL, GD_T8, PLACETEXT_IN, NULL, (APTR)T8Clicked,
  198.    295, 76, 37, 19, (UBYTE *)"_5", NULL, GD_T5, PLACETEXT_IN, NULL, (APTR)T5Clicked,
  199.    295, 100, 37, 19, (UBYTE *)"_2", NULL, GD_T2, PLACETEXT_IN, NULL, (APTR)T2Clicked,
  200.    250, 52, 37, 19, (UBYTE *)"_7", NULL, GD_T7, PLACETEXT_IN, NULL, (APTR)T7Clicked,
  201.    250, 76, 37, 19, (UBYTE *)"_4", NULL, GD_T4, PLACETEXT_IN, NULL, (APTR)T4Clicked,
  202.    250, 100, 37, 19, (UBYTE *)"_1", NULL, GD_T1, PLACETEXT_IN, NULL, (APTR)T1Clicked,
  203.    250, 124, 37, 19, (UBYTE *)"_0", NULL, GD_T0, PLACETEXT_IN, NULL, (APTR)T0Clicked,
  204.    295, 124, 37, 19, (UBYTE *)"OK", NULL, GD_TStern, PLACETEXT_IN, NULL, (APTR)TSternClicked,
  205.    10, 52, 126, 19, NULL, NULL, GD_Wiedergabe, PLACETEXT_IN, NULL, (APTR)WiedergabeClicked,
  206.    10, 76, 126, 19, NULL, NULL, GD_Stop, PLACETEXT_IN, NULL, (APTR)StopClicked,
  207.    10, 100, 60, 19, (UBYTE *)"<_<", NULL, GD_Ruecklauf, PLACETEXT_IN, NULL, (APTR)RuecklaufClicked,
  208.    76, 100, 60, 19, (UBYTE *)"_>>", NULL, GD_Vorlauf, PLACETEXT_IN, NULL, (APTR)VorlaufClicked,
  209.    251, 152, 37, 19, (UBYTE *)"_-", NULL, GD_Minus, PLACETEXT_IN, NULL, (APTR)MinusClicked,
  210.    339, 152, 37, 19, (UBYTE *)"_+", NULL, GD_Plus, PLACETEXT_IN, NULL, (APTR)PlusClicked,
  211.    338, 124, 37, 19, (UBYTE *)"_?", NULL, GD_TNumber, PLACETEXT_IN, NULL, (APTR)TNumberClicked,
  212.    10, 152, 71, 19, NULL, NULL, GD_Auswurf, PLACETEXT_IN, NULL, (APTR)AuswurfClicked,
  213.    86, 152, 49, 19, NULL, NULL, GD_Lock, PLACETEXT_IN, NULL, (APTR)LockClicked,
  214.    173, 52, 59, 18, NULL, NULL, GD_AudioL, PLACETEXT_LEFT,NULL, (APTR)AudioLClicked,
  215.    173, 128, 59, 18, NULL, NULL, GD_AudioR, PLACETEXT_LEFT,NULL, (APTR)AudioRClicked,
  216.    153, 76, 79, 19, (UBYTE *)0L, NULL, GD_VolumeL, PLACETEXT_ABOVE, NULL, (APTR)VolumeLClicked,
  217.    397, 160, 228, 19, NULL, NULL, GD_Titel, 0, NULL, (APTR)TitelClicked,
  218.    153, 152, 79, 19, (UBYTE *)0L, NULL, GD_VolumeR, PLACETEXT_ABOVE, NULL, (APTR)VolumeRClicked,
  219.    205, 102, 20, 11, NULL, NULL, GD_Kopplung, PLACETEXT_LEFT, NULL, (APTR)KopplungClicked,
  220.    10, 120, 126, 19, (UBYTE *)0L, NULL, GD_Position, PLACETEXT_ABOVE, NULL, (APTR)PositionClicked,
  221.    466, 184, 155, 18, NULL, NULL, GD_AuswahlModus, PLACETEXT_IN, NULL, (APTR)AuswahlmodusClicked
  222. };                 
  223.  
  224. struct List Liste = { NULL, NULL, NULL, 0};
  225.  
  226. UBYTE *AudioLLabels[]={0L,0L,0L,0L,0L};
  227. UBYTE *AudioRLabels[]={0L,0L,0L,0L,0L};
  228. UBYTE *AuswahlModusLabels[]={0L,0L,0L};
  229.  
  230. ULONG *CDPlayerGTags[] = {
  231.    (ULONG *)(GTLV_Labels), (ULONG *)&Liste,
  232.    (ULONG *)(TAG_DONE),
  233.  
  234.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  235.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  236.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  237.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  238.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  239.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  240.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  241.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  242.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  243.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  244.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  245.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  246.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  247.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  248.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  249.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  250.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  251.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  252.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  253.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  254.  
  255.    (ULONG *)(GTCY_Labels), (ULONG *)&AudioLLabels[ 0 ], (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  256.    (ULONG *)(GTCY_Labels), (ULONG *)&AudioRLabels[ 0 ], (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  257.  
  258.    /* Lautstärke-Regler */
  259.  
  260.    (ULONG *)(GA_FollowMouse), (ULONG *)TRUE,
  261.    (ULONG *)(GTSL_Max), (ULONG *)255,
  262.    (ULONG *)(PGA_Freedom), (ULONG *)LORIENT_HORIZ,
  263.    (ULONG *)(GA_RelVerify), (ULONG *)TRUE,
  264.    (ULONG *)(GA_Immediate),(ULONG *)TRUE,
  265.    (ULONG *)(GT_Underscore), (ULONG *)'_', 
  266.    (ULONG *)(GTSL_Level), (ULONG *)255,(TAG_DONE),
  267.  
  268.    (ULONG *)(GTST_MaxChars), (ULONG *)49, (ULONG *)(TAG_DONE),
  269.  
  270.    (ULONG *)(GA_FollowMouse), (ULONG *)TRUE,
  271.    (ULONG *)(GTSL_Max), (ULONG *)255,
  272.    (ULONG *)(PGA_Freedom), (ULONG *)LORIENT_HORIZ,
  273.    (ULONG *)(GA_RelVerify), (ULONG *)TRUE,
  274.    (ULONG *)(GA_Immediate),(ULONG *)TRUE,
  275.    (ULONG *)(GT_Underscore), (ULONG *)'_',
  276.    (ULONG *)(GTSL_Level), (ULONG *)255,(TAG_DONE),
  277.  
  278.    (ULONG *)(GTCB_Checked), (ULONG *)TRUE,
  279.    (ULONG *)(GT_Underscore), (ULONG *)'_', (ULONG *)(TAG_DONE),
  280.  
  281.    (ULONG *)(GA_FollowMouse), (ULONG *)TRUE,
  282.    (ULONG *)(GTSL_Max), (ULONG *)290000,
  283.    (ULONG *)(PGA_Freedom), (ULONG *)LORIENT_HORIZ,
  284.    (ULONG *)(GA_RelVerify), (ULONG *)TRUE,
  285.    (ULONG *)(GA_Immediate),(ULONG *)TRUE,
  286.    (ULONG *)(GT_Underscore), (ULONG *)'_',
  287.    (ULONG *)(GTSL_Level), (ULONG *)150000,(TAG_DONE),
  288.  
  289.    (ULONG *)(GTCY_Labels), (ULONG *)&AuswahlModusLabels,
  290. };
  291.  
  292. int SetupScreen()
  293. {
  294.    if ( ! ( Scr = LockPubScreen( PubScreenName )))
  295.     {
  296.       Error(GS(26,"Unable to lock public screen!"));
  297.       return( 1L );
  298.     }
  299.  
  300.    if(Scr->Height<300)
  301.      LowRes=TRUE;
  302.    if(LowRes==TRUE)
  303.     {
  304.      topaz11.ta_Name="topaz.font";
  305.      topaz11.ta_YSize=9;
  306.     }
  307.  
  308.    if ( ! ( Font = OpenDiskFont( &topaz11 )))
  309.     {
  310.       if(LowRes==FALSE)
  311.         Error(GS(25,"Unable to load font: times.font 15"));
  312.       else
  313.         Error(GS(77,"Unable to load font: topaz.font 9"));
  314.       return( 5L );
  315.     }
  316.  
  317.    if ( ! ( VisualInfo=GetVisualInfoA( Scr, NULL )))
  318.     {
  319.       Error(GS(30,"Unable to get VisualInfo."));
  320.       return( 2L );
  321.     }
  322.  
  323.    return( 0L );
  324. }
  325.  
  326. void CloseDownScreen()
  327. {
  328.    if ( VisualInfo ) {
  329.       FreeVisualInfo( VisualInfo );
  330.       VisualInfo = NULL;
  331.    }
  332.  
  333.    if ( Scr        ) {
  334.       UnlockPubScreen( NULL, Scr );
  335.       Scr = NULL;
  336.    }
  337.  
  338.    if ( Font       ) {
  339.       CloseFont( Font );
  340.       Font = NULL;
  341.    }
  342. }
  343.  
  344. void DrawBevelBox2(rp,x,y,w,h,tag)
  345.  APTR  rp;
  346.  UWORD x,y,w,h;
  347.  APTR  tag;
  348. {
  349.  if(LowRes==TRUE)
  350.   {
  351.    h=(h*2)/3+1;
  352.    y=((y*2)/3)+26;
  353.   }
  354.  DrawBevelBoxA(rp,x,y,w,h,tag);
  355. }
  356.  
  357. void CDPlayerRender()
  358. {
  359.    UWORD    offx, offy;
  360.    struct TagItem tag[2];
  361.    struct TagItem tagr[3];
  362.  
  363.    offx = OffsetX(CDPlayerWnd);
  364.    offy = OffsetY(CDPlayerWnd);
  365.  
  366.    tag[0].ti_Tag   = GT_VisualInfo;
  367.    tag[0].ti_Data  = VisualInfo;
  368.    tag[1].ti_Tag   = TAG_DONE;
  369.    tagr[0].ti_Tag  = GT_VisualInfo;
  370.    tagr[0].ti_Data = VisualInfo;
  371.    tagr[1].ti_Tag  = GTBB_Recessed;
  372.    tagr[1].ti_Data = TRUE;
  373.    tagr[2].ti_Tag  = TAG_DONE;
  374.  
  375.    DrawBevelBox2( CDPlayerWnd->RPort, offx + 296, offy + 152, 37, 19, &tagr );
  376.    DrawBevelBox2( CDPlayerWnd->RPort, offx + 4, offy + 148, 139, 26, &tag );
  377.    DrawBevelBox2( CDPlayerWnd->RPort, offx + 146, offy + 46, 92, 128, &tag );
  378.    DrawBevelBox2( CDPlayerWnd->RPort, offx + 4, offy + 46, 139, 98, &tag );
  379.    DrawBevelBox2( CDPlayerWnd->RPort, offx + 241, offy + 46, 143, 128, &tag );
  380.    DrawBevelBox2( CDPlayerWnd->RPort, offx + -2, offy + 42, 393, 137, &tag );
  381.    if(LowRes==FALSE)
  382.      DrawBevelBoxA( CDPlayerWnd->RPort, offx + -2, offy + 182, 627, 41, &tagr );
  383.    else
  384.      DrawBevelBoxA( CDPlayerWnd->RPort, offx + -2, offy + ((182*2)/3)+17, 627, 41, &tagr );
  385.    DrawBevelBoxA( CDPlayerWnd->RPort, offx + -2, offy + -12, 393, 51, &tagr );
  386. }
  387.  
  388. int HandleCDPlayerIDCMP()
  389. {
  390.    struct Gadget        *gad;
  391.    struct IntuiMessage  *m;
  392.    struct MenuItem      *n;
  393.    int         (*func)();
  394.    BOOL        running = 1;
  395.  
  396.    while( m = GTGetIMsg( CDPlayerWnd->UserPort )) {
  397.  
  398.       CopyMem(( char * )m, ( char * )&CDPlayerMsg, (long)sizeof( struct IntuiMessage ));
  399.  
  400.       GTReplyIMsg( m );
  401.  
  402.       switch ( CDPlayerMsg.Class ) {
  403.          case  IDCMP_REFRESHWINDOW:
  404.             Einstellungen.Titel=255;
  405.             Einstellungen.Auswahl=255;
  406.             GTBeginRefresh( CDPlayerWnd );
  407.             CDPlayerRender();
  408.             CDDisplay();
  409.             GTEndRefresh( CDPlayerWnd, TRUE );
  410.             break;
  411.  
  412.          case  IDCMP_CLOSEWINDOW:
  413.             if(FastExit==TRUE)
  414.               running = 0;
  415.             else
  416.               running = 2;
  417.             break;
  418.  
  419.          case  IDCMP_GADGETUP:
  420.             gad = CDPlayerMsg.IAddress;
  421.             func = ( void * )gad->UserData;
  422.             func(TRUE,CDPlayerMsg.Code);
  423.             if(gad->GadgetID==GD_VolumeL) VolumeDownL=NULL;
  424.             else if(gad->GadgetID==GD_VolumeR) VolumeDownR=NULL;
  425.             else if(gad->GadgetID==GD_Position) PositionDown=NULL;
  426.             break;
  427.  
  428.          case  IDCMP_GADGETDOWN:
  429.             gad = CDPlayerMsg.IAddress;
  430.             func = ( void * )gad->UserData;
  431.             func(FALSE,CDPlayerMsg.Code);
  432.             if(gad->GadgetID==GD_VolumeL) VolumeDownL=gad;
  433.             else if(gad->GadgetID==GD_VolumeR) VolumeDownR=gad;
  434.             else if(gad->GadgetID==GD_Position)
  435.              {
  436.               if(Einstellungen.Funktion!=STANDBY) Symbol(POSITION);
  437.               PositionDown=gad;
  438.              } 
  439.             break;
  440.  
  441.          case IDCMP_MOUSEMOVE:
  442.             if(VolumeDownL!=NULL)
  443.               VolumeLClicked(FALSE,CDPlayerMsg.Code);
  444.             else if(VolumeDownR!=NULL)
  445.               VolumeRClicked(FALSE,CDPlayerMsg.Code);
  446.             else if(PositionDown!=NULL)
  447.               PositionClicked(FALSE,CDPlayerMsg.Code);
  448.             break;
  449.  
  450.          case  IDCMP_VANILLAKEY:
  451.             switch(toupper((UBYTE)CDPlayerMsg.Code))
  452.              {
  453.               case 'W':
  454.               case 'P':
  455.                 WiedergabeClicked();
  456.                break;
  457.               case 'S':
  458.                 StopClicked();
  459.                break;
  460.               case '<':
  461.                 RuecklaufClicked();
  462.                break;
  463.               case '>':
  464.                 VorlaufClicked();
  465.                break;
  466.               case 'E':
  467.               case 'F':
  468.                 AuswurfClicked();
  469.                break;
  470.               case 'O':
  471.                 LockClicked();
  472.                break;
  473.               case 'K':
  474.               case 'I':
  475.               case '=':
  476.                 KopplungPressed();
  477.                break;
  478.               case 'L':
  479.                 if(CDPlayerMsg.Code=='l')
  480.                  {
  481.                   switch(Einstellungen.AudioL)
  482.                    {
  483.                     case AUDIO_LINKS:
  484.                       AudioLClicked(FALSE,1);
  485.                      break;
  486.                     case AUDIO_RECHTS:
  487.                       AudioLClicked(FALSE,2);
  488.                      break;
  489.                     case AUDIO_BEIDE:
  490.                       AudioLClicked(FALSE,3);
  491.                      break;
  492.                     case AUDIO_AUS:
  493.                       AudioLClicked(FALSE,0);
  494.                      break;
  495.                    }
  496.                  }
  497.                 else
  498.                  {
  499.                   switch(Einstellungen.AudioL)
  500.                    {
  501.                     case AUDIO_LINKS:
  502.                       AudioLClicked(FALSE,3);
  503.                      break;
  504.                     case AUDIO_RECHTS:
  505.                       AudioLClicked(FALSE,0);
  506.                      break;
  507.                     case AUDIO_BEIDE:
  508.                       AudioLClicked(FALSE,1);
  509.                      break;
  510.                     case AUDIO_AUS:
  511.                       AudioLClicked(FALSE,2);
  512.                      break;
  513.                    }
  514.                  }
  515.                break;
  516.               case 'R':
  517.                 if(CDPlayerMsg.Code=='r')
  518.                  {
  519.                   switch(Einstellungen.AudioR)
  520.                    {
  521.                     case AUDIO_RECHTS:
  522.                       AudioRClicked(FALSE,1);
  523.                      break;
  524.                     case AUDIO_LINKS:
  525.                       AudioRClicked(FALSE,2);
  526.                      break;
  527.                     case AUDIO_BEIDE:
  528.                       AudioRClicked(FALSE,3);
  529.                      break;
  530.                     case AUDIO_AUS:
  531.                       AudioRClicked(FALSE,0);
  532.                      break;
  533.                    }
  534.                  }
  535.                 else
  536.                  {
  537.                   switch(Einstellungen.AudioR)
  538.                    {
  539.                     case AUDIO_RECHTS:
  540.                       AudioRClicked(FALSE,3);
  541.                      break;
  542.                     case AUDIO_LINKS:
  543.                       AudioRClicked(FALSE,0);
  544.                      break;
  545.                     case AUDIO_BEIDE:
  546.                       AudioRClicked(FALSE,1);
  547.                      break;
  548.                     case AUDIO_AUS:
  549.                       AudioRClicked(FALSE,2);
  550.                      break;
  551.                    }
  552.                  }
  553.                break;
  554.               case '0':
  555.                 Num(0);
  556.                break;
  557.               case '1':
  558.                 Num(1);
  559.                break;
  560.               case '2':
  561.                 Num(2);
  562.                break;
  563.               case '3':
  564.                 Num(3);
  565.                break;
  566.               case '4':
  567.                 Num(4);
  568.                break;
  569.               case '5':
  570.                 Num(5);
  571.                break;
  572.               case '6':
  573.                 Num(6);
  574.                break;
  575.               case '7':
  576.                 Num(7);
  577.                break;
  578.               case '8':
  579.                 Num(8);
  580.                break;
  581.               case '9':
  582.                 Num(9);
  583.                break;
  584.               case '#':
  585.                 TClearClicked();
  586.                break;
  587.               case '?':
  588.                 TNumberClicked();
  589.                break;
  590.               case '*':
  591.               case 13:
  592.                 TSternClicked();
  593.                break;
  594.               case '+':
  595.                 PlusClicked();
  596.                break;
  597.               case '-':
  598.                 MinusClicked();
  599.                break;
  600.              }
  601.             break;
  602.  
  603.          case  IDCMP_MENUPICK:
  604.             while( CDPlayerMsg.Code != MENUNULL ) {
  605.                n = ItemAddress( CDPlayerMenus, CDPlayerMsg.Code );
  606.                func = (void *)(GTMENUITEM_USERDATA( n ));
  607.                if(!(func==0xFFFFFFFF))
  608.                  if(func==0xFFFFFFFE)
  609.                    running=0;
  610.                  else
  611.                    func(n);
  612.                else
  613.                  running=2;
  614.                CDPlayerMsg.Code = n->NextSelect;
  615.             }
  616.             break;
  617.       }
  618.    }
  619.    return( running );
  620. }
  621.  
  622. int OpenCDPlayerWindow()
  623. {
  624.    struct TagItem    tag[11];
  625.    struct NewGadget  ng;
  626.    struct Gadget    *g;
  627.    UWORD    lc, tc;
  628.    UWORD    offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  629.  
  630.    AudioLLabels[0]=GS(48,"L");
  631.    AudioLLabels[1]=GS(49,"R");
  632.    AudioLLabels[2]=GS(50,"L+R");
  633.    AudioLLabels[3]=GS(51,"Off");
  634.    AudioRLabels[0]=GS(49,"R");
  635.    AudioRLabels[1]=GS(48,"L");
  636.    AudioRLabels[2]=GS(50,"L+R");
  637.    AudioRLabels[3]=GS(51,"Off");
  638.    AuswahlModusLabels[0]=GS(75,"Sequential");
  639.    AuswahlModusLabels[1]=GS(76,"Shuffle");
  640.    if(LowRes==FALSE)
  641.      CDPlayerNGad[GD_Wiedergabe].ng_GadgetText=GS(400,"_Play/Pause");
  642.    else
  643.      CDPlayerNGad[GD_Wiedergabe].ng_GadgetText=GS(407,"_Play/Pause");
  644.    CDPlayerNGad[GD_Stop].ng_GadgetText=GS(401,"_Stop");
  645.    CDPlayerNGad[GD_Auswurf].ng_GadgetText=GS(402,"_Eject");
  646.    CDPlayerNGad[GD_AudioL].ng_GadgetText=GS(403,"_L");
  647.    CDPlayerNGad[GD_AudioR].ng_GadgetText=GS(404,"_R");
  648.    CDPlayerNGad[GD_Kopplung].ng_GadgetText=GS(405,"L_=R");
  649.    CDPlayerNGad[GD_Lock].ng_GadgetText=GS(406,"L_ock");
  650.  
  651.    if ( ! ( g = CreateContext( &CDPlayerGList )))
  652.     {
  653.       Error(GS(31,"Unable to create gadgets!"));
  654.       return( 1L );
  655.     }
  656.  
  657.    for( lc = 0, tc = 0; lc < CDPlayer_CNT; lc++ ) {
  658.  
  659.       CopyMem((char * )&CDPlayerNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  660.  
  661.       ng.ng_VisualInfo = VisualInfo;
  662.       ng.ng_TextAttr   = &topaz11;
  663.       ng.ng_LeftEdge  += offx+4;
  664.       ng.ng_TopEdge   += offy+17;
  665.       if(LowRes==TRUE)
  666.        {
  667.         if(lc!=0)
  668.          {
  669.           ng.ng_TopEdge = (ng.ng_TopEdge*2)/3;
  670.           ng.ng_TopEdge += 26;
  671.          }
  672.         ng.ng_Height = (ng.ng_Height*2)/3+1;
  673.         if(lc==GD_Titel)
  674.           ng.ng_Height=13;
  675.         else if(lc==GD_Liste)
  676.           ng.ng_Height=130;
  677.         else if(lc==GD_AuswahlModus)
  678.           ng.ng_TopEdge+=2;
  679.        }
  680.  
  681.       CDPlayerGadgets[ lc ] = g = CreateGadgetA((ULONG)CDPlayerGTypes[ lc ], g, &ng, ( struct TagItem * )&CDPlayerGTags[ tc ] );
  682.  
  683.       while( CDPlayerGTags[ tc ] ) tc += 2;
  684.       tc++;
  685.  
  686.       if ( NOT g )
  687.        {
  688.          Error(GS(31,"Unable to create gadgets!"));
  689.          return( 2L );
  690.        }
  691.    }
  692.  
  693.    for(tc=0;tc<TEXTE;tc++)
  694.     {
  695.      if(CDPlayerNewMenu[tc].nm_Label==NULL)
  696.       {
  697.        Texte[tc]=GS(200+tc,Texte[tc]);
  698.        CDPlayerNewMenu[tc].nm_Label=Texte[tc];
  699.       }
  700.     }
  701.  
  702.    tag[0].ti_Tag = GTMN_FrontPen;
  703.    tag[0].ti_Data = 0L;
  704.    tag[1].ti_Tag = TAG_DONE;
  705.    if ( ! ( CDPlayerMenus = CreateMenusA( CDPlayerNewMenu, &tag )))
  706.     {
  707.       Error(GS(32,"Unable to create menus!"));
  708.       return( 3L );
  709.     }
  710.  
  711.    LayoutMenusA( CDPlayerMenus, VisualInfo, NULL);
  712.  
  713.    tag[0].ti_Tag=WA_Left;
  714.    tag[0].ti_Data=CDPlayerLeft;
  715.    tag[1].ti_Tag=WA_Top;
  716.    tag[1].ti_Data=CDPlayerTop;
  717.    tag[2].ti_Tag=WA_InnerWidth;
  718.    tag[2].ti_Data=CDPlayerWidth;
  719.    tag[3].ti_Tag=WA_InnerHeight;
  720.    tag[3].ti_Data=CDPlayerHeight;
  721.    if(LowRes==TRUE)
  722.     {
  723.      tag[1].ti_Data=0;
  724.      tag[3].ti_Data=((tag[3].ti_Data*2)/3)+36;
  725.     }
  726.    tag[4].ti_Tag=WA_IDCMP;
  727.    tag[4].ti_Data=CYCLEIDCMP|IDCMP_VANILLAKEY|LISTVIEWIDCMP|STRINGIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|SLIDERIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW;
  728.    tag[5].ti_Tag= WA_Flags;
  729.    tag[5].ti_Data=WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|ACTIVATE;
  730.    tag[6].ti_Tag=WA_Gadgets;
  731.    tag[6].ti_Data=CDPlayerGList;
  732.    tag[7].ti_Tag=WA_Title;
  733.    tag[7].ti_Data=CDPlayerWdt;
  734.    tag[8].ti_Tag=WA_PubScreen;
  735.    tag[8].ti_Data=Scr;
  736.    tag[9].ti_Tag=TAG_DONE;
  737.    if ( ! ( CDPlayerWnd = OpenWindowTagList( NULL, &tag )))
  738.     {
  739.      Error(GS(33,"Unable to open window!"));
  740.      return( 4L );
  741.     }
  742.  
  743.    SetMenuStrip( CDPlayerWnd, CDPlayerMenus );
  744.    GTRefreshWindow( CDPlayerWnd, NULL );
  745.  
  746.    CDPlayerRender();
  747.  
  748.    return( 0L );
  749. }
  750.  
  751. void CloseCDPlayerWindow()
  752. {
  753.    if ( CDPlayerMenus      ) {
  754.       ClearMenuStrip( CDPlayerWnd );
  755.       FreeMenus( CDPlayerMenus );
  756.       CDPlayerMenus = NULL;   }
  757.  
  758.    if ( CDPlayerWnd        ) {
  759.       CloseWindow( CDPlayerWnd );
  760.       CDPlayerWnd = NULL;
  761.    }
  762.  
  763.    if ( CDPlayerGList      ) {
  764.       FreeGadgets( CDPlayerGList );
  765.       CDPlayerGList = NULL;
  766.    }
  767. }
  768.